// type User = {
//   id: number,
//   name: string,
//   age: number
// }

// // 小技巧，通过& {} 可以看到keyof组成的联合类型
// type UserKeys = keyof User & {}

// let a: UserKeys = "id";

// const person = {
//   name: "jack",
//   sex: "男",
//   age: 20
// }

// // 可以和typeof联合使用，获取一个对象的键的联合类型
// type PersonKeys = keyof typeof person

// // 可以和方括号运算符联合使用，获取对象类型值的类型

// type Person = {
//   name: string;
//   sex: boolean;
//   age: number;
// }

// type ValueType = Person[keyof Person];

// // 之前重载实现的createElement

// // function createElement(tagName: 'a'): HTMLAnchorElement
// // function createElement(tagName: 'div'): HTMLDivElement
// // function createElement(tagName:string):HTMLElement {
// //   return document.createElement(tagName)
// // }

// type TagName = keyof HTMLElementTagNameMap & {};

// function createElement<T extends TagName>(tagName:T):HTMLElementTagNameMap[T] {
//   return document.createElement(tagName)
// }

// const div = createElement("div")
// const user = {
//   id: 1,
//   name: 'hayes',
//   age: 19
// }


// let a = typeof user;

